from woniusales_ui_test_ddt.browser.browser import Browser
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import random
import subprocess
class BasePage():
    """基础页面，提供基础的操作方法，打开浏览器，关闭浏览器，输入，点击，清除，获取文本，获取值"""
    WebDriverWait_max = 20

    def __init__(self):
        """打开浏览器"""
        self.dr = Browser().dr  # 实例一个浏览器

    # def __del__(self):
    #     """可能会报错，如果有错误使用 下面的close_all_browser方法"""
    #     self.dr.quit()
    #     Browser.dr = None  # 关闭了浏览器后，Browser等于空，下一个用例才能打开浏览器。

    def close_all_browser(self):
        """关闭浏览器"""
        self.dr.quit()
        # subprocess.run("taskkill /F /IM chrome*", shell=True, stdout=subprocess.PIPE,
        #                stderr=subprocess.PIPE,universal_newlines=True)
        Browser.dr = None  # 关闭了浏览器后，Browser等于空，下一个用例才能打开浏览器。

    def input_text(self, locator, text):
        """通用的input框输入文本信息"""
        element = self.dr.find_element(*locator)
        element.clear()
        element.send_keys(*text)

        # 判断一下有没有输入进去
        # 判断一个表达式，如果成立没有异常，否则有异常 AssertionError
        # assert element.get_attribute("value") == text, f"输入input框文本 {text} 失败！"

    def click(self, locator, times=1):
        """点击元素"""
        element = self.dr.find_element(*locator)
        for i in range(times):
            element.click()

    def rand_click(self,locator,times=1):
        element = random.choice(self.dr.find_elements(*locator))
        for i in range(times):
            element.click()
        return element.text

    def get_text(self, locator):
        """获取元素的文本"""
        # 获取之前要等到元素出现
        element = WebDriverWait(self.dr, self.WebDriverWait_max).until(EC.visibility_of_element_located(locator))
        return element.text


if __name__ == '__main__':
    BasePage()
